As is known, computer graphics processing systems process large amounts of data, including texture data, among others. A texture is a digital image, often rectangular, having a (u, v) coordinate space. The smallest addressable unit of a texture is a texel, which is assigned a specific (u, v) coordinate based on its location. In a texture mapping operation, a texture is mapped to the surface of a graphical model as the model is rendered to create a destination image. In the destination image, pixels are located at specific coordinates in the (x, y) coordinate system.
Texture data often resides in system memory, which is a shared resource. In many computer systems, other devices may attempt to access data used by the graphics processing system or utilize a shared system bus, both of which may result in increased data access time for the graphics processing system. Additionally, requests for data from system memory may take excessive amounts of time for other reasons. Accordingly, accessing system memory may have a performance inhibiting effect on graphics processing systems.
One technique for improving data accessibility is through a texture cache that is dedicated to storing texture data. The texture cache is provided texture data from the system memory before the data is required for texture processing, thereby providing the graphics system with the texture data and reducing the requirement to access system memory. This, in turn, reduces problems associated with memory latency.
A texture cache, however, generally lacks the capacity to store the entire texture map. A texture cache sufficient to store an entire texture map would likely suffer from reduced performance because cache access time generally increases as the cache size increases. Further, an increased cache size requires more chip resources, which are often already at a premium.
One common approach to increasing cache size without significantly degrading cache performance is to provide two-level caches. The first level in a two-level cache is provided for the data that is most likely to be immediately required, whereas the second level stores data more likely to be used in the near future. A two-level cache provides benefits in terms of increased cache size without a significant decrease in cache performance by providing increased data availability and decreased memory access time. The use of a two-level cache, however, creates issues regarding the selection and transfer of the data to the cache system and the deletion of data from the cache system. Thus, without an appropriate determination of which data to request, transfer, and delete, the benefits of a two-level cache system may be reduced.
In other words, an efficient technique must be established for allocating cache spatial and temporal resources such that the texture data required for processing is available and complete in the cache system. For instance, when the block of data required is found in the cache, it is a “hit” and a copy of the requested data is sent to the processor. Alternatively, when the block of data is not found, it is a “miss” and the requested data must ultimately be read from the system memory and transferred to both the cache and the processor. The memory access for the “miss” creates undesirable memory latency. Determining an efficient technique for controlling the cache system will address the important need for fast processing of graphics data in a computer graphics environment.
Thus, a heretofore-unaddressed need exists in the industry to address the aforementioned deficiencies and inadequacies.